package com.rabbit.service;

import com.github.pagehelper.PageInfo;
import com.rabbit.dto.OssFileDTO;
import com.rabbit.exception.BusinessException;
import com.rabbit.vo.req.UserReq;
import com.rabbit.vo.res.UserDetailRes;
import com.rabbit.vo.res.UserRes;

/**
 * @author zjw
 * @date 2022/1/13 14:31
 */
public interface UserService {

    /**
     * 添加/更新时 数据校验
     *
     * @param userReq  用户添加/更新数据封装
     * @param operType 操作类型 1新增 2修改
     * @throws BusinessException 业务异常
     */
    void checkUnique(UserReq userReq, int operType) throws BusinessException;

    /**
     * 用户列表查询
     *
     * @param userReq 用户列表数据封装
     * @return PageInfo 分页对象
     */
    PageInfo<UserRes> queryUserList(UserReq userReq);

    /**
     * 更新用户基本资料
     *
     * @param userReq 基本资料封装
     */
    void updateBaseInfo(UserReq userReq);

    /**
     * 删除用户
     *
     * @param userReq 需要删除的用户
     */
    void deleteUser(UserReq userReq);

    /**
     * 重置用户密码
     *
     * @param userReq 需要重置密码的用户
     */
    void resetPassword(UserReq userReq) ;

    /**
     * 新增用户
     *
     * @param userReq 需要新增的用户
     */
    void addUser(UserReq userReq);

    /**
     * 修改用户
     *
     * @param userReq 需要修改的用户
     */
    void updateUser(UserReq userReq);

    /**
     * 检查用户是否为超级管理员
     *
     * @param userId 用户编号
     * @throws BusinessException 业务异常
     */
    void checkIsAdmin(Long userId) throws BusinessException;

    /**
     * 根据用户编号查询用户信息
     *
     * @param userId 用户编号
     * @return UserDetailRes
     */
    UserDetailRes queryUserById(Long userId);

    /**
     * 查询用户详情前，检查数据是否越权访问
     *
     * @param userId 用户编号
     * @throws BusinessException 业务异常
     */
    void checkDataScope(Long userId) throws BusinessException;

    /**
     * 调整用户状态
     *
     * @param userReq 调整状态的用户
     */
    void updateUserEnabled(UserReq userReq);

    /**
     * 更新用户头像
     *
     * @param userReq 用户头像更新
     * @return String 文件路径
     */
    String updateAvatar(UserReq userReq) throws BusinessException;
}
